package com.xtoad.ecms.baseinfo.service.impl;

import com.xtoad.ecms.baseinfo.converter.PageElementConverter;
import com.xtoad.ecms.baseinfo.dto.PageElementDTO;
import com.xtoad.ecms.baseinfo.model.PageElement;
import com.xtoad.ecms.baseinfo.repository.IPageElementRepository;
import com.xtoad.ecms.baseinfo.service.IPageElementService;
import com.xtoad.ecms.common.web.exception.BusinessException;
import com.xtoad.ecms.common.web.exception.ResultCodeEnum;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;
import java.util.Optional;

/**
 * 页面元素类服务实现类
 *
 * @author xtoad
 * @date 2021/01/18
 */
@Service
public class PageElementServiceImpl implements IPageElementService {

    @Resource
    private IPageElementRepository pageElementRepository;
    @Resource
    private PageElementConverter pageElementConverter;

    /**
     * 根据id查询页面元素类
     *
     * @param id 页面元素类id
     * @return 查询结果
     */
    @Override
    public PageElementDTO getPageElementById(final Long id) {
        Optional<PageElement> pageElement = pageElementRepository.findById(id);
        if (pageElement.isPresent()) {
            return pageElementConverter.toDto(pageElement.get());
        }

        throw new BusinessException(ResultCodeEnum.NOT_FOUND);
    }

    /**
     * 查询全部页面元素类，不分页
     *
     * @return 查询结果
     */
    @Override
    public List<PageElementDTO> getAllPageElement() {
        List<PageElement> allPageElements = this.pageElementRepository.findAll();
        return pageElementConverter.toDtoList(allPageElements);
    }

    /**
     * 新增页面元素类
     *
     * @param pageElementDTO 保存对象
     * @return 新增结果
     */
    @Override
    public PageElementDTO insert(final PageElementDTO pageElementDTO) {
        PageElement pageElement = pageElementConverter.toModel(pageElementDTO);
        pageElement = pageElementRepository.save(pageElement);

        return pageElementConverter.toDto(pageElement);
    }

    /**
     * 删除页面元素类
     *
     * @param id 删除对象id
     */
    @Override
    public void deleteById(final Long id) {
        pageElementRepository.deleteById(id);
    }

    /**
     * 删除页面元素类
     *
     * @param pageElementDTO 删除对象
     */
    @Override
    public void delete(final PageElementDTO pageElementDTO) {
        PageElement pageElement = pageElementConverter.toModel(pageElementDTO);
        pageElementRepository.delete(pageElement);
    }

    /**
     * 更新页面元素类
     *
     * @param pageElementDTO 更新对象
     * @return 更新结果
     */
    @Override
    public PageElementDTO update(final PageElementDTO pageElementDTO) {
        PageElement pageElement = pageElementConverter.toModel(pageElementDTO);
        pageElement = pageElementRepository.save(pageElement);

        return pageElementConverter.toDto(pageElement);
    }

    /**
     * 批量新增页面元素类
     *
     * @param pageElementDTOList 新增对象
     * @return 新增结果
     */
    @Override
    public List<PageElementDTO> batchInsert(final List<PageElementDTO> pageElementDTOList) {
        List<PageElement> pageElements = pageElementConverter.toModelList(pageElementDTOList);
        pageElements = pageElementRepository.saveAll(pageElements);

        return pageElementConverter.toDtoList(pageElements);
    }

    /**
     * 批量删除页面元素类
     *
     * @param pageElementDTOList 删除对象
     */
    @Override
    public void batchDelete(final List<PageElementDTO> pageElementDTOList) {
        List<PageElement> pageElements = pageElementConverter.toModelList(pageElementDTOList);
        pageElementRepository.deleteInBatch(pageElements);
    }

    /**
     * 批量更新页面元素类
     *
     * @param pageElementDTOList 更新对象
     * @return 更新结果
     */
    @Override
    public List<PageElementDTO> batchUpdate(final List<PageElementDTO> pageElementDTOList) {
        List<PageElement> pageElements = pageElementConverter.toModelList(pageElementDTOList);
        pageElements = pageElementRepository.saveAll(pageElements);

        return pageElementConverter.toDtoList(pageElements);
    }

}
